package com.mine.frame.common.net

import com.mine.frame.common.net.api.ApiService
import com.mine.frame.common.net.utils.InterceptorUtil
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory
import retrofit2.converter.gson.GsonConverterFactory
import java.util.concurrent.TimeUnit

/**
 * company 广东玛格家居有限公司
 * @author smoker
 * @Date 2021/11/11
 * Description:这个类属于网络请求工具类，用于初始化Retrofit，okhttp连接的一些设置，设置请求API的baseUrl、gson解析方式等。还有通过接口对象,调用接口类中的方法也写在这个里面了。
 */
class BaseRequest private constructor() {


    companion object{
        //接口地址
        private const val HOST = "http://47.111.74.127:8090"
        private const val CONNECT_TIME = 2000L//设置请求超时时间
        private const val READ_TIME = 2000L//设置读取数据超时时间
        private const val WRITE_TIME = 2000L//设置写入数据超时时间

        val instant =
            BaseRequestHolder.holder
    }

    private object BaseRequestHolder{
        val holder = BaseRequest()
    }


    //初始化OKHttp,绑定拦截器事件
    private val client = OkHttpClient.Builder()
        .connectTimeout(CONNECT_TIME,TimeUnit.MILLISECONDS)     //设置请求超时时间
        .readTimeout(READ_TIME,TimeUnit.MILLISECONDS)//设置读取数据超时时间
        .writeTimeout(WRITE_TIME,TimeUnit.MILLISECONDS)//设置写入数据超时时间
        .addInterceptor(InterceptorUtil.logInterceptor())//绑定日志拦截器
        .addNetworkInterceptor(InterceptorUtil.headerInterceptor())//绑定header拦截器
        .build()


    private val retrofit = Retrofit.Builder()
        .addConverterFactory(GsonConverterFactory.create())   //设置gson转换器,将返回的json数据转为实体
        .addCallAdapterFactory(RxJava3CallAdapterFactory.create())//设置CallAdapter
        .baseUrl(HOST) //设置客户端okhttp相关参数
        .client(client)
        .build()


    val apiService: ApiService by lazy { retrofit.create(
        ApiService::class.java) }

}